home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 April: Mac OS SDK / Dev.CD Apr 96 SDK / Dev.CD Apr 96 SDK1.toast / Development Kits (Disc 1) / OpenDoc Development Framework / ODFDev / ODF / Framewrk / FWGadgts / Sources / FWClustr.cpp < prev    next >
Encoding:
Text File  |  1995-11-08  |  5.2 KB  |  166 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWClustr.cpp
  4. //    Release Version:    $ 1.0d11 $
  5. //
  6. //    Copyright:    © 1995 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #include "FWFrameW.hpp"
  11.  
  12. #ifndef FWCLUSTR_H
  13. #include "FWClustr.h"
  14. #endif
  15.  
  16. #ifndef FWRADIOB_H
  17. #include "FWRadioB.h"
  18. #endif
  19.  
  20. #ifndef FWFRAME_H
  21. #include "FWFrame.h"
  22. #endif
  23.  
  24. //========================================================================================
  25. // Runtime Informations
  26. //========================================================================================
  27.  
  28. #if FW_LIB_EXPORT_PRAGMAS
  29. #pragma lib_export on
  30. #endif
  31.  
  32. #ifdef FW_BUILD_MAC
  33. #pragma segment fwgadgts
  34. #endif
  35.  
  36. FW_DEFINE_CLASS_M1(FW_CRadioCluster, FW_CGadget)
  37.  
  38. //========================================================================================
  39. //    CLASS FW_CRadioCluster
  40. //========================================================================================
  41.  
  42. //----------------------------------------------------------------------------------------
  43. // FW_CRadioCluster::FW_CRadioCluster
  44. //----------------------------------------------------------------------------------------
  45.  
  46. FW_CRadioCluster::FW_CRadioCluster(Environment* ev,
  47.                                    FW_CView* container, ODID id,
  48.                                    const FW_CRect& bounds,
  49.                                    const FW_CString& label,
  50.                                    ODID buttonInitiallyOn) :
  51.     FW_CGadget(ev, container, id, bounds),
  52.     fLabel(label),
  53.     fConnection(this),
  54.     fButtonOnId(buttonInitiallyOn)
  55. {
  56.     fConnection.Connect();
  57. }
  58.  
  59. //----------------------------------------------------------------------------------------
  60. // FW_CRadioCluster::~FW_CRadioCluster
  61. //----------------------------------------------------------------------------------------
  62.  
  63. FW_CRadioCluster::~FW_CRadioCluster()
  64. {
  65. }
  66.  
  67. //----------------------------------------------------------------------------------------
  68. // FW_CRadioCluster::GadgetAdopted
  69. //----------------------------------------------------------------------------------------
  70. // *LSD2  can only add button views to Radio Cluster
  71. void FW_CRadioCluster::ViewAdded(Environment* ev, FW_CGadget *gadget)
  72. {
  73.     FW_CRadioButton* button = FW_DYNAMIC_CAST(FW_CRadioButton, gadget);
  74.     FW_ASSERT(button);
  75.  
  76.     button->SetState(ev, button->GetIdentifier(ev) == fButtonOnId ? 1 : 0);
  77.     
  78.     FW_CInterest interest(button, button->GetButtonPressedNotificationToken(ev));
  79.     fConnection.AddInterest(interest);
  80. }
  81.  
  82. //----------------------------------------------------------------------------------------
  83. // FW_CRadioCluster::GadgetRemoved
  84. //----------------------------------------------------------------------------------------
  85.  
  86. void FW_CRadioCluster::ViewRemoved(Environment* ev, const FW_CGadget& gadget)
  87. {
  88.     FW_CRadioButton* button = FW_DYNAMIC_CAST(FW_CRadioButton, &gadget);
  89.     FW_ASSERT(button);
  90.     
  91.     FW_CInterest interest(button, button->GetButtonPressedNotificationToken(ev));
  92.     fConnection.RemoveInterest(interest);
  93. }
  94.  
  95. //----------------------------------------------------------------------------------------
  96. // FW_CRadioCluster::SetButtonOn
  97. //----------------------------------------------------------------------------------------
  98.  
  99. void FW_CRadioCluster::SetButtonOn(Environment* ev, ODID buttonOnId)
  100. {
  101.     FW_CViewIterator iter(ev, this);
  102.     for (FW_CView* gadget = (FW_CView*)iter.First(ev); iter.IsNotComplete(ev); gadget = (FW_CView*)iter.Next(ev))
  103.     {
  104.         FW_CRadioButton* button = FW_DYNAMIC_CAST(FW_CRadioButton, gadget);
  105.         FW_ASSERT(button);
  106.     
  107.         if (button->GetIdentifier(ev) == buttonOnId && !button->GetState(ev))
  108.         {
  109.             button->SetState(ev, TRUE);
  110.             button->Invalidate(ev);
  111.         }
  112.         else if (button->GetState(ev))
  113.         {
  114.             button->SetState(ev, FALSE);
  115.             button->Invalidate(ev);
  116.         }
  117.     }
  118.     
  119.     fButtonOnId = buttonOnId;
  120. }
  121.  
  122. //----------------------------------------------------------------------------------------
  123. // FW_CRadioCluster::Draw
  124. //----------------------------------------------------------------------------------------
  125.  
  126. void FW_CRadioCluster::Draw(Environment* ev, ODFacet* facet, ODShape* invalidShape)
  127. {
  128.         //const FW_CPoint kLabelPosition(ff(16), ff(0));
  129.         
  130.         // ----- Draw the label
  131.         
  132.         //FW_CTextShape::RenderText(gc, fLabel, kLabelPosition, FW_STextAlignment());
  133.         
  134.         // ----- Draw the frame
  135. }
  136.  
  137. //----------------------------------------------------------------------------------------
  138. // FW_CRadioCluster::HandleNotification
  139. //----------------------------------------------------------------------------------------
  140.  
  141. void FW_CRadioCluster::HandleNotification(const FW_CNotification& notification)
  142. {
  143.     Environment* ev = somGetGlobalEnvironment();
  144.     
  145.     FW_CRadioButton* buttonPressed = FW_DYNAMIC_CAST(FW_CRadioButton, notification.GetNotifier());
  146.     FW_ASSERT(buttonPressed);
  147.  
  148.     // Turn all but the just pressed button off
  149.     
  150.     FW_CViewIterator iter(ev, this);
  151.     for (FW_CView* gadget = (FW_CView*)iter.First(ev); iter.IsNotComplete(ev); 
  152.                                                     gadget = (FW_CView*)iter.Next(ev))
  153.     {
  154.         FW_CRadioButton* button = FW_DYNAMIC_CAST(FW_CRadioButton, gadget);
  155.         FW_ASSERT(button);
  156.     
  157.         if (button != buttonPressed && button->GetState(ev))
  158.         {
  159.             FW_CViewContext gc(ev, button, GetFrame(ev)->GetActiveFacet(ev));
  160.             button->SetState(ev, gc, FALSE);
  161.         }
  162.     }
  163.     
  164.     fButtonOnId = buttonPressed->GetIdentifier(ev);
  165. }
  166.